programing

변수 워크북 / 워크시트 vba 선언

lovejava 2023. 5. 19. 23:52

변수 워크북 / 워크시트 vba 선언

이것이 사소한 질문으로 들릴 수도 있다는 것을 알지만, 저는 선언할 수 없는 것 같습니다.workbook 는또.worksheetVBA저는 다음과 같은 코드를 가지고 있지만, 제가 무엇을 잘못하고 있는지 알 수가 없습니다. 바로 해야 합니다.일반으다같변은선수데없언습다문니제가는하를음로와 같은 를 선언하는 데 .Dim i As Integer기타

sub kl() 

    Dim wb As Workbook
    Dim ws As Worksheet

    Set wb = ActiveWorkbook
    Set ws = Sheet("name")

    wb.ws.Select

End Sub

위 코드를 실행하면 다음 메시지가 표시됩니다.type missmatchmessage

시트 대신 시트를 사용하고 순차적으로 활성화합니다.

Sub kl()
    Dim wb As Workbook
    Dim ws As Worksheet
    Set wb = ActiveWorkbook
    Set ws = Sheets("Sheet1")
    wb.Activate
    ws.Select
End Sub

가 컴파일 에는 "" " " " " "ThisWorkbook( 지금 을수 있는 있는 Worksheet개체는 코드 이름을 사용합니다.

Debug.Print Sheet1.Range("A1").Value

코드 이름을 변경하여 "탭 이름"(사용자가 언제든지 수정할 수 있음)과 관계없이 필요한 모든 이름(유효한 VBA 식별자인 경우)으로 코드 이름을 설정할 수 있습니다.(Name)특성 도구 창의 속성(F4):

시트 1 특성

Name할 수 탭 이름을 의미하며, "탭 이름"은 "탭 이름"입니다.(Name)속성은 워크시트의 코드 이름을 나타내며 사용자는 Visual Basic Editor에 액세스하지 않고는 속성을 변경할 수 없습니다.

VBA는 이 코드 이름을 사용하여 자동으로 글로벌 범위를 선언합니다.Worksheet당신의 코드가 그 시트를 참조하기 위해 어디서든 무료로 사용할 수 있는 객체 변수.

즉, 시트가 다음에 존재하는 경우ThisWorkbook컴파일 시에는 변수를 선언할 필요가 없습니다. 변수는 이미 존재합니다!


의 경우)ThisWorkbook또는 그렇지 않음), 그런 다음 선언하고 할당해야 합니다.Worksheet변수입니다.

을 합니다.WorksheetsWorkbook검색할 개체:

Dim wb As Workbook
Set wb = Application.Workbooks.Open(path)

Dim ws As Worksheet
Set ws = wb.Worksheets(nameOrIndex)

중요 참고 사항...

  • 워크시트의 이름과 색인은 워크시트 구조가 보호되지 않는 한 사용자가 쉽게 수정할 수 있습니다(우발적이든 아니든).워크북이 보호되지 않으면 이름이나 색인만으로 원하는 특정 워크시트를 얻을 수 있다고 가정할 수 없습니다. 시트 형식을 확인하는 것이 좋습니다(예: 셀 A1에 특정 텍스트가 포함되어 있는지 또는 특정 이름의 테이블이 있고 특정 열 제목이 포함되어 있는지 확인).

  • 사용Sheets컬렉션에 포함됨Worksheet객체, 그러나 포함할 수도 있습니다.Chart인스턴스(instance)를 생성하고 워크시트가 아닌 기존 시트 유형을 절반으로 줄입니다.할당Worksheet무엇이든지 간에 참조.Sheets(nameOrIndex)반환됩니다. 이러한 이유로 유형 불일치 런타임 오류가 발생할 위험이 있습니다.

  • 자격 미달Worksheets컬렉션은 암묵적인 ActiveWorkbook 참조입니다. 즉,Worksheets명령이 실행되는 순간에 활성화된 워크북에서 수집을 꺼냅니다.이러한 암묵적인 참조는 특히 사용자가 코드가 실행되는 동안 Excel UI를 탐색하고 상호 작용할 수 있는 경우 코드를 취약하고 버그가 발생하기 쉽습니다.

  • 특정 시트를 활성화하려는 의도가 아니라면 전화할 필요가 없습니다.ws.Activate워크시트를 사용하여 수행할 작업의 99%를 수행합니다.그냥 당신의 것을 사용하세요.ws변수 대신 변수를 사용합니다.

세 번째 솔루션:나는 설정할 것입니다.wswbSheet("name")항상 활성 워크북을 참조하며, 코드가 발전함에 따라 변경될 수 있습니다.

sub kl() 

    Dim wb As Workbook
    Dim ws As Worksheet

    Set wb = ActiveWorkbook
    'be aware as this might produce an error, if Shet "name" does not exist
    Set ws = wb.Sheets("name")
    ' if wb is other than the active workbook
    wb.activate
    ws.Select

End Sub

같은 문제에 부딪힌 것 뿐입니다.

할 은 당이해할신것다입을 선언하는 입니다.ws~하듯이Object

또한 다음과 같아야 합니다.

Set ws = wb.Sheets("Sheet1")

그리고 다음과 같이 해서는 안 됩니다.

Set ws = Sheet("Sheet1")

아래 코드는 저에게 작동하고 있습니다.

sub kl()

Dim wb As Workbook
Dim ws As Object

Set wb = ThisWorkbook
Set ws = wb.Sheets("Sheet1")

MsgBox ws.Name

End Sub

변수가 다른 모듈/부분 집합과 충돌할 수 있으므로 변수 이름 변경 시도

 Dim Workbk As Workbook
 Dim Worksh As Worksheet

하지만 시도해보세요.

 Set ws = wb.Sheets("name")

와 함께 작동하는지 기억이 나지 않습니다.Sheet

놀랍게도 Excel 2007 이상 버전에서는 워크북 및 워크시트에 대한 변수를 선언해야 합니다.한 줄 식만 추가하면 됩니다.

Sub kl()

    Set ws = ThisWorkbook.Sheets("name")
    ws.select
End Sub

다른 모든 것을 제거하고 즐기세요.하지만 시트를 선택해야 하는 이유는 무엇입니까? 시트를 선택하는 것은 이제 계산과 조작을 위해 오래된 방식입니다.다음과 같은 공식을 추가합니다.

Sub kl()

    Set ws = ThisWorkbook.Sheets("name")
    ws.range("cell reference").formula = "your formula"
'OR in case you are using copy paste formula, just use 'insert or formula method instead of ActiveSheet.paste e.g.:
   ws.range("your cell").formula
'or
   ws.colums("your col: one col e.g. "A:A").insert
'if you need to clear the previous value, just add the following above insert line
   ws.columns("your column").delete

End Sub

저도 같은 문제가 있었습니다.저는 용한사를 요.WorksheetWorksheets그리고 해결되었습니다.그들 사이의 차이점이 무엇인지 잘 모르겠습니다.

Dim ws as Object

Set ws = Worksheets("name")

워크시트를 oobject 대신 워크시트로 선언할 때 이 워크시트의 옵션 버튼(Active X)으로 작업하는 데 문제가 있었습니다(Active-X 요소도 마찬가지일 것으로 생각됨).개체로 선언하면 모든 것이 정상적으로 작동합니다.

위에 많은 답이 있습니다!제 생각은 이렇습니다.

Sub kl()

    Dim wb As Workbook
    Dim ws As Worksheet

    Set ws = Sheets("name")
    Set wb = ThisWorkbook

With ws
    .Select
End With

End Sub

우리가 모두 언급했듯이 당신의 첫 번째 (아마도 우발적인) 실수는 "시트"입니다."시트"여야 합니다.

with 블록은 wb를 현재 워크북이 아닌 다른 것으로 설정하면 제대로 절단되기 때문에 유용합니다.

언급URL : https://stackoverflow.com/questions/26039872/declaring-variable-workbook-worksheet-vba