변수 워크북 / 워크시트 vba 선언
이것이 사소한 질문으로 들릴 수도 있다는 것을 알지만, 저는 선언할 수 없는 것 같습니다.workbook
는또.worksheet
의 VBA
저는 다음과 같은 코드를 가지고 있지만, 제가 무엇을 잘못하고 있는지 알 수가 없습니다. 바로 해야 합니다.일반으다같변은선수데없언습다문니제가는하를음로와 같은 를 선언하는 데 .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 missmatch
message
시트 대신 시트를 사용하고 순차적으로 활성화합니다.
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):
그Name
할 수 탭 이름을 의미하며, "탭 이름"은 "탭 이름"입니다.(Name)
속성은 워크시트의 코드 이름을 나타내며 사용자는 Visual Basic Editor에 액세스하지 않고는 속성을 변경할 수 없습니다.
VBA는 이 코드 이름을 사용하여 자동으로 글로벌 범위를 선언합니다.Worksheet
당신의 코드가 그 시트를 참조하기 위해 어디서든 무료로 사용할 수 있는 객체 변수.
즉, 시트가 다음에 존재하는 경우ThisWorkbook
컴파일 시에는 변수를 선언할 필요가 없습니다. 변수는 이미 존재합니다!
의 경우)ThisWorkbook
또는 그렇지 않음), 그런 다음 선언하고 할당해야 합니다.Worksheet
변수입니다.
을 합니다.Worksheets
의 Workbook
검색할 개체:
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
변수 대신 변수를 사용합니다.
세 번째 솔루션:나는 설정할 것입니다.ws
한 wb
의 Sheet("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
저도 같은 문제가 있었습니다.저는 용한사를 요.Worksheet
에 Worksheets
그리고 해결되었습니다.그들 사이의 차이점이 무엇인지 잘 모르겠습니다.
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
'programing' 카테고리의 다른 글
git push -u가 무슨 뜻입니까? (0) | 2023.05.19 |
---|---|
C# 또는 VB 설명서 주석에 굵은 글씨 또는 기울임꼴로 표시됩니까? (0) | 2023.05.19 |
HEAD를 이전 위치로 다시 이동하려면 어떻게 해야 합니까?(헤드 분리) & 커밋 실행 취소 (0) | 2023.05.14 |
VB 단위의 수율.그물 (0) | 2023.05.14 |
윈도우즈 EXE 파일 서명 (0) | 2023.05.14 |