У меня есть функция, которая возвращает мне список текущих листов:Варианта против несоответствия типа Струнного при прохождении массива функционировать
Function getListOfSheetsW() As Variant
Dim i As Integer
Dim sheetNames() As Variant
ReDim sheetNames(1 To Sheets.Count)
For i = 1 To Sheets.Count
sheetNames(i) = Sheets(i).name
Next i
getListOfSheetsW = sheetNames
End Function
Тогда у меня есть функция, которая возвращает значение TRUE или FALSE в зависимости от того, если needle
в haystack
или нет ,
Function IsInArray2(ByVal needle As String, haystack() As String) As Boolean
Dim element As Variant
For Each element In haystack
If element = needle Then
IsInArray = True
Exit Function
End If
Next element
IsInArray = False
End Function
Моя цель состоит в том, чтобы создать новую подпрограмму, которая будет первой проверкой, если лист с указанным именем уже существует, и если нет, то создать новую. Я попробовал следующее:
Sub CreateNewSheet(ByVal dstWSheetName As String)
Dim srcWSheetName As String
' Dim sheetNames() As String
Dim sheetNames() As Variant
sheetNames = getListOfSheetsW()
Dim sheetCount As Integer
If IsInArray2(dstWSheetName, sheetNames) Then
MsgBox "Sheet with following name: " & dstWSheetName & " already exists"
Else
srcWSheetName = ActiveSheet.name
sheetCount = Sheets.Count
' CREATE NEW SHEET
' Worksheets(dstWsheetName).Delete
Sheets.Add.name = dstWSheetName
' Q: why 6 instead of 5
' Worksheets("Test").Move after:=Worksheets("Sheet5")
Worksheets(dstWSheetName).Move After:=Worksheets(sheetCount + 1)
' SWITCH TO SRC SHEET
Worksheets(srcWSheetName).Activate
End If
End Sub
Я звоню это так:
Sub CallCreateNewSheet()
Call CreateNewSheet("test")
End Sub
Я думаю, что проблема с Dim sheetNames() As String
или Dim sheetNames() As Variant
.
Когда я использую Dim sheetNames() As String
я получаю
Run-time error '13': Type mismatch
Когда я использую Dim sheetNames() As Variant
я получаю:
Compile error: Type mismatch: array or user-defined type expected
У меня была аналогичная проблема, но before определение sheetNames
, как массив не помог здесь. В чем проблема и что означают две разные ошибки?
Спасибо, это сработало. Итак, если я объявил переменную без типа, то тип переменной задается в соответствии с типом переменной, который ей назначен? Я думал, что это цель Варианта. Спасибо –
Добро пожаловать. Если вы не укажете тип, тип по умолчанию будет Variant. –