Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel userforms中的全局变量不起作用_Excel_Global Variables_Userform_Vba - Fatal编程技术网

Excel userforms中的全局变量不起作用

Excel userforms中的全局变量不起作用,excel,global-variables,userform,vba,Excel,Global Variables,Userform,Vba,我正在创建用户表单。用户表单彼此之间有着非常紧密的联系——使用彼此之间的信息。所以我想创建几个全局变量,让我的生活更轻松: Public nazwa_arkusza As String Public skoroszyt As Workbooks Public arkusz As Worksheet 它们是以使用的形式书写的Klient_krajEdytuj是组合框在Klient_kraj用户表单中。我想在不同的用户窗体中执行arkusz变量,但我得到运行时错误:“对象不支持此方法” 此变量也

我正在创建用户表单。用户表单彼此之间有着非常紧密的联系——使用彼此之间的信息。所以我想创建几个全局变量,让我的生活更轻松:

Public nazwa_arkusza As String
Public skoroszyt As Workbooks
Public arkusz As Worksheet
它们是以使用的形式书写的Klient_krajEdytuj
组合框
Klient_kraj用户表单中。我想在不同的用户窗体中执行arkusz变量,但我得到运行时错误:“对象不支持此方法”

此变量也将在不同的userform中使用


我做错了什么?

arkusz
是一个
工作表
对象:
arkusz作为工作表
。您所说的
是什么意思?我想在不同的用户窗体中执行arkusz变量
?如何在不同的表单上“执行工作表”?userform上定义的公共变量成为userform的属性。为了在整个项目中访问它们,您需要在模块中定义变量。引发错误的确切位置是哪里?@simoco 1st userform(如果需要)创建新文件并(如果需要)创建新工作表。在使用userform的过程中,所使用的工作表将被多次更改,因此了解实际使用的工作表对我来说很重要。所以“execute”这个词并没有什么误导性。@Santosh我可以访问变量skoroszyt,我需要做的就是在变量前面添加userforum的名称。到目前为止还可以,但也许你是对的,我应该把它移到模块。
Private Sub but_next_Click()

Dim Faktura As Range, faktury_range As Range
Dim LastRow As Integer

LastRow = Klient_kraj.skoroszyt.arkusz.Cells(Rows.Count, 1).End(xlUp).Row 'error line

Set faktury_range = skoroszyt.Range("A1:A" & LastRow)

(...)

end sub
Private Sub edytuj_Click()

Dim nazwa As String

nazwa_arkusza = kraj.List(kraj.ListIndex, 1) & " " & Mid(okres1.Value, 4, 2) & Mid(okres2.Value, 3, 3)

nazwa = "C:\1\" & klient.Text & ".xlsx"


'Jeżeli kraj nie wybrany = msgbox
If kraj.Value = "" Then

MsgBox ("Nie wybrałeś kraju")
Exit Sub:

Else

    If okres1.Value = "" Or okres2.Value = "" Then
    MsgBox ("Nie wybrałeś okresu rozliczeniowego")
    Exit Sub:
    End If

End If


'Jeżeli nie ma pliku - utwórz nowy
If Dir(nazwa) = "" Then
    Workbooks.Add(1).SaveAs Filename:="C:\1\" & klient.Text, FileFormat:=51
    Worksheets(1).Name = nazwa_arkusza

Else

'Jeżeli nie jest otwarty - otwórz
    On Error GoTo niema_pliku:
    If GetObject(, "Excel.Application").Workbooks(Klient_kraj.klient.Text & ".xlsx") Is Nothing Then
    Workbooks.Open Filename:="C:\1\" & klient.Text & ".xlsx"

    Else
    Workbooks(Klient_kraj.klient.Text).Activate

    End If

End If

Set skoroszyt = Workbooks(Klient_kraj.klient.Text & ".xlsx")

'Jeżeli arkusz nie istnieje - utwórz; istnieje - aktywuj
On Error GoTo niema_arkusza:
If skoroszyt.Worksheets(nazwa_arkusza).Name = "" Then

Else
skoroszyt.Worksheets(nazwa_arkusza).Activate

End If

On Error GoTo 0
Set arkusz = Sheets(nazwa_arkusza)
Application.Windows(klient.Text & ".xlsx").Visible = False
Faktura.Show

niema_pliku:
If Err.Number = 9 Then
Resume Next
End If

niema_arkusza:
If Err.Number = 9 Then
skoroszyt.Worksheets.Add.Name = nazwa_arkusza
skoroszyt.Worksheets(nazwa_arkusza).Activate
Resume Next
End If

End Sub