ID tematu: 73971
 |
Nie widzi Public Const w Excel 2019 |
Autor |
Wiadomość |
Tajan

Pomógł: 5234 razy Posty: 11412
|
Wysłany: 13-01-2023, 12:43
|
|
|
A jeżeli w edytorze VBA użyjesz opcji "Debug"->"Compile VBAProject" to projekt kompiluje ci się bez błędów? |
|
 | ID posta:
424161
|
|
|
 |
|
|
|
master_mix
Excel Expert


Wersja: Win Office 365
Pomógł: 1216 razy Posty: 2319
|
Wysłany: 13-01-2023, 12:58
|
|
|
Coś na pewno z nieprawidłową kompilacją ..
spróbuj wyczyścić albo zaznaczyć w opcjach żądania kompilacji
screen w załączniku
a czy czasem nie masz tak samo zdeklarowanej zmiennej (ta sama nazwa) w zasięgu procedury?
np.
Kod: | Const s As String = "excel forum"
Sub test()
Dim s, d
Debug.Print s
End Sub
|
compile.png
|
 |
Plik ściągnięto 11 raz(y) 18.95 KB |
|
_________________
Podejmę współpracę (pracę)
Programowanie C#, Android, iOS, VB.NET, VBA, ASP.NET Core, WPF, Xamarin, Power Platforms, XAML, MVC, LINQ, Entity Framework. Bazy danych SQL Server, Oracle, MySQL, Firebird
Wrocław i okolice …lub zdalnie. |
|
 | ID posta:
424162
|
|
|
 |
|
|
hanss9
Fan Excela

Posty: 60
|
Wysłany: 13-01-2023, 17:26
|
|
|
Tajan napisał/a: | A jeżeli w edytorze VBA użyjesz opcji "Debug"->"Compile VBAProject" to projekt kompiluje ci się bez błędów? |
Kompiluje się z błędami. Po usunięciu i poprawie błędów wszystko się uspokoiło.
Chyba to było to. Testuje
Dzięki wielkie za wielką pomoc |
|
 | ID posta:
424168
|
|
|
 |
|
|
hanss9
Fan Excela

Posty: 60
|
Wysłany: 13-01-2023, 17:31
|
|
|
master_mix napisał/a: | Coś na pewno z nieprawidłową kompilacją ..
spróbuj wyczyścić albo zaznaczyć w opcjach żądania kompilacji
screen w załączniku
|
Problem kompilacji. Zrobiłem tak jam Tajan napisał. Usunąłem błędy i się uspokoiło przynajmniej na razie. Dzięki wielkie |
|
 | ID posta:
424169
|
|
|
 |
|
|
Tajan

Pomógł: 5234 razy Posty: 11412
|
Wysłany: 13-01-2023, 19:10
|
|
|
Z tego co zauważyłem część modułów masz z opcją wymuszania deklaracji zmiennych "Option Expilcit" a część bez niej, co również może wpływać na przebieg kompilacji programów. Należy to ujednolicić , obojętnie jak, chociaż najbardziej wskazane byłoby gdyby wszystkie były z "Option Explicit". |
|
 | ID posta:
424175
|
|
|
 |
|
|
Rafał B.
ExcelSpec


Wersja: Win Office 2016
Pomógł: 67 razy Posty: 421
|
Wysłany: 14-01-2023, 14:43
|
|
|
master_mix napisał/a: | hanss9 napisał/a: | których excel 2019 nie widzi na niektórych komputerach.
Stałe zadeklarowałem w osobnym module |
Błędne deklaracje to np:
Kod: | Public Const BAZA_FIRM As String = "M:\REJESTR POSTĘPOWAŃ PRZETARGOWYCH\2023\" & NAZWA_PLIKU_FIRM |
Nie deklaruj tak stałych, w niektórych przypadkach (zdarza się rzadko) powoduje to błędy kompilacji.
Nie śledziłem nigdy ani nie drążyłem tematu, jeżeli chodzi o kompilowanie takiej "sklejonej" deklaracji, ale sam doświadczyłem przypadków błędu z tym związanego
deklaruj :
Kod: | Public Const BAZA_FIRM As String = "M:\REJESTR POSTĘPOWAŃ PRZETARGOWYCH\2023\BAZA KONTRAHENTÓW.xlsx" |
|
@master_mix Czy próbował Kolega wówczas eksportu i importu problematycznego modułu wraz z wymuszaniem kompilacji (chyba wymusi się wówczas przegenerowanie p-code)? Ogólnie to było dawno czy raczej współcześnie? Nigdy nie doświadczyłem tego problemu (a w każdym projekcie używam sklejania stałych), wersje hosta na które pisałem to Excel i Word od 2010 do dzisiejszych, VBA6 i VBA7.
Jeśli chodzi o problemy z kompilacją znany jest mi (również wspominany na SO) tylko bug z enumami, które zadeklarowane w klasach (zamiast w zwykłych modułach) potrafią wyrzucić przy kompilacji okazjonalnie (bardzo rzadko) `Constant expression required` lub `Type mismatch`. |
_________________ Częstym błędem jest zakładanie, że autorzy niezrozumiałego kodu będą w jakiś sposób potrafili wyrazić się jasno i klarownie w komentarzach. Kevlin Henney |
|
 | ID posta:
424187
|
|
|
 |
|
|
master_mix
Excel Expert


Wersja: Win Office 365
Pomógł: 1216 razy Posty: 2319
|
Wysłany: 15-01-2023, 22:06
|
|
|
@Rafał B., oj nie pamiętam już, było to dawno a mój wiek pozwala na "nie pamiętanie" pewnych rzeczy
Poza tym w ostatnich latach niezbyt często sięgałem do VBA i nie śledziłem zmian jakie MS wdrożył w VBA7 |
_________________
Podejmę współpracę (pracę)
Programowanie C#, Android, iOS, VB.NET, VBA, ASP.NET Core, WPF, Xamarin, Power Platforms, XAML, MVC, LINQ, Entity Framework. Bazy danych SQL Server, Oracle, MySQL, Firebird
Wrocław i okolice …lub zdalnie. |
|
 | ID posta:
424219
|
|
|
 |
|
|
Artik
Artik


Wersja: Win Office 365
Pomógł: 3230 razy Posty: 10696
|
Wysłany: 16-01-2023, 01:56
|
|
|
Np. deklaracja w takiej kolejności zwraca błąd kompilacji Kod: | Public Const BAZA_FIRM As String = "M:\" & NAZWA_PLIKU_FIRM
Public Const NAZWA_PLIKU_FIRM As String = "Alutka.xlsx" | Jeżeli deklarację NAZWA_PLIKU_FIRM umieścimy przed BAZA_FIRM to będzie OK. Co mnie trochę dziwi, to zadeklarowanie obu stałych w osobnych modułach nie zgłasza błędu.
Artik |
_________________ Persistence is a virtue in the world of programming.
Weryfikator NIP - szybka, masowa weryfikacja w MF i VIES. |
|
 | ID posta:
424222
|
|
|
 |
|
|
master_mix
Excel Expert


Wersja: Win Office 365
Pomógł: 1216 razy Posty: 2319
|
Wysłany: 16-01-2023, 14:01
|
|
|
Artik napisał/a: | Np. deklaracja w takiej kolejności zwraca błąd kompilacji |
I też nie zawsze.
np. do nowego projektu wstawiamy
Kod: | Public Const NAZWA_PLIKU_FIRM As String = "Alutka.xlsx" |
kompilujemy
dopisujemy resztę:
Kod: | Public Const BAZA_FIRM As String = "M:\" & NAZWA_PLIKU_FIRM
Public Const NAZWA_PLIKU_FIRM As String = "Alutka.xlsx"
Sub test()
Debug.Print BAZA_FIRM
End Sub
|
uruchamiamy i jest ok, nawet jak zresetujemy kompilację
Próbowałem się doczytać w dokumentacji jakiś szczegółów, ale nic nie znalazłem, co mogłoby naprowadzić na logikę działania kompilatora - wszystkie deklaracje są niby prawidłowe.
Choć czytałem bardzo pobieżnie, no i mój angielski ...
Może Wy coś znajdziecie
https://interoperability.blob.core.windows.net/files/MS-VBAL/[MS-VBAL].pdf |
_________________
Podejmę współpracę (pracę)
Programowanie C#, Android, iOS, VB.NET, VBA, ASP.NET Core, WPF, Xamarin, Power Platforms, XAML, MVC, LINQ, Entity Framework. Bazy danych SQL Server, Oracle, MySQL, Firebird
Wrocław i okolice …lub zdalnie. |
|
 | ID posta:
424238
|
|
|
 |
|
|
hanss9
Fan Excela

Posty: 60
|
Wysłany: 20-01-2023, 16:10
|
|
|
Niestety problem znowu się pojawił i znowu gubi stałe. Z tego co zauważyłem problem najcześciej występuje na kodzie:
Kod: |
Private Sub UserForm_Initialize()
Dim Wiersze As String
Dim Wiersze2 As String
Dim zakres As String
Dim kolumny As Long
Dim K As Long
Wiersze = Worksheets("OFERENCI").Range("A1").End(xlToRight).Address
zakres = Worksheets("OFERENCI").Range("A1:A20").Address
With Worksheets("OFERENCI")
Wiersze2 = .Range("A1").End(xlToRight).Address(0, 0)
ComboBox1.List = Application.Transpose(.Range("J1:" & Wiersze).Value)
End With
'załadowanie danych do Listbox1
With ListBox1
.ColumnCount = 6
.ColumnWidths = "25;120;220;200;200;90;100"
Dim rng As Range
Wiersze = Worksheets("OFERENCI").Range("B1", Worksheets("OFERENCI").Range("B1").End(xlDown)).Count
Set rng = ActiveSheet.UsedRange 'TU GENERUJE BŁAD !!!!!!
.RowSource = "OFERENCI!" & rng.Range(Range("A2"), "G" & Wiersze).Address 'TU GENERUJE BŁAD !!!!!
End With
'Ustalenie parametrów dla nagłówka
Nazw_Lp.Left = 288
Nazw_Lp.Width = 30
Nazw_skroc.Left = Nazw_Lp.Left + Nazw_Lp.Width
Nazw_skroc.Width = 120
Nazwa_kontrah.Left = Nazw_skroc.Left + Nazw_skroc.Width
Nazwa_kontrah.Width = 220
Nazwa_Adres.Left = Nazwa_kontrah.Left + Nazwa_kontrah.Width
Nazwa_Adres.Width = 200
Nazwa_email.Left = Nazwa_Adres.Left + Nazwa_Adres.Width
Nazwa_email.Width = 200
Nazwa_NIP.Left = Nazwa_email.Left + Nazwa_email.Width
Nazwa_NIP.Width = 90
'załadowanie danych do listbox2
kolumny = Worksheets("OFERENCI").Range("J1", Worksheets("OFERENCI").Range("A1").End(xlToRight)).Count
For K = 10 To kolumny + 9
ListBox2.AddItem Worksheets("OFERENCI").Cells(1, K).Value
Next K
TextBox1.Value = Worksheets(REJESTR_SYSTEMOWY).Cells(ActiveCell.row, 35).Value
End Sub
|
zobaczcie proszę co jest źle. Dla excela 2016 problem nie występuje |
|
 | ID posta:
424393
|
|
|
 |
|
|
master_mix
Excel Expert


Wersja: Win Office 365
Pomógł: 1216 razy Posty: 2319
|
Wysłany: 21-01-2023, 14:56
|
|
|
hanss9 napisał/a: | Set rng = ActiveSheet.UsedRange 'TU GENERUJE BŁAD !!!!!! |
hanss9 napisał/a: | .RowSource = "OFERENCI!" & rng.Range(Range("A2"), "G" & Wiersze).Address 'TU GENERUJE BŁAD !!!!! |
A co to ma wspólnego ze stałymi ? |
_________________
Podejmę współpracę (pracę)
Programowanie C#, Android, iOS, VB.NET, VBA, ASP.NET Core, WPF, Xamarin, Power Platforms, XAML, MVC, LINQ, Entity Framework. Bazy danych SQL Server, Oracle, MySQL, Firebird
Wrocław i okolice …lub zdalnie. |
|
 | ID posta:
424415
|
|
|
 |
|
|
hanss9
Fan Excela

Posty: 60
|
Wysłany: 21-01-2023, 23:31
|
|
|
Po zawieszeniu się aplikacji na powyższych wierszach plik się zamyka i po ponownym uruchomieniu nie widzi stałych. Aby znowu je widział trzeba dodać jedną a potem ją wywołać np. przez msgboxa. Jak sprawdzam kompilację to jest ok. Wymusiłem deklarowanie zmiennych dla wszystkich procedur i nie wiem co jeszcze poprawić by się nie zawieszał? Jedyne co mi do głowy przychodzi to inaczej napisać te dwie linie, które wywołują błąd. |
|
 | ID posta:
424431
|
|
|
 |
|
|
ple4
Stały bywalec Excelforum

Wersja: Win Office 2003
Pomógł: 68 razy Posty: 311
|
Wysłany: 22-01-2023, 03:36
|
|
|
1. 'Wiersze2' i 'zakres' to do czego są, skoro prócz deklaracji i pojedynczego przypisania, nigdzie więcej nie występują ?
2. Po co ci w ogóle takie przypisania (?) jak: Kod: | zakres = Worksheets("OFERENCI").Range("A1:A20").Address |
Skoro zakres dla tej zmiennej 'zakres' jest ci znany i "wynosi": "$A$1:$A$20" to wpisz po prostu do zmiennej to nieszczęsne "$A$1:$A$20" ... (?)
3. 'ActiveSheet' dla '.UsedRange' dla 'Set rng' to dla jakiego aktywnego arkusza jest w chwili wywoływania 'UserForm' (?) - dla "OFERENCI" ... (?) ... dla arkusza zapisanego w zmiennej/stałej (?) 'REJESTR_SYSTEMOWY' ... (?) ... dla arkusza jakiegoś wykresu ... (dla którego nie ma "UsedRange") ?
4. Co jest aktywnym arkuszem dla "Range("A2")" w: Kod: | rng.Range(Range("A2"), "G" & Wiersze).Address |
i co właściwie jest w tej komórce "A2" (?) - domyślnie kod przyjmuje dla 'Range("A2")' właściwość 'Value' i zwraca zawartość tej komórki, może tu jest zgrzyt - jeśli chciałeś użyć tego 'Range("A2")' jako zwykłego adresu dla zapisu 'Range(Range1, Range2).Address', to trzeba było po prostu wpisać to "A2", tak jak to zrobiłeś dla '"G" & Wiersze'
5. Nie stosujesz konstrukcji "With ... End With", ani przypisań "Set" do arkuszy i masz wielostopniowe dłużyzny.
6. I dlaczego "ActiveCell" w Kod: | Worksheets(REJESTR_SYSTEMOWY).Cells(ActiveCell.Row, 35).Value | - nie ma innego sposobu na określenie "tego" wiersza ? |
|
 | ID posta:
424434
|
|
|
 |
|
|
master_mix
Excel Expert


Wersja: Win Office 365
Pomógł: 1216 razy Posty: 2319
|
Wysłany: 23-01-2023, 01:52
|
|
|
zacznij od chociaż podstawowej obsługi błędów, zwłaszcza w formularzach.
prześledź kod krokowo, znajdź miejsca szczególnie wrażliwe na błędy i zabezpiecz je.
nie przeglądałem Twojego pliku, o ile jeszcze jest aktualny, jak będę miał chwilę to zajrzę, albo koledzy pomogą. |
_________________
Podejmę współpracę (pracę)
Programowanie C#, Android, iOS, VB.NET, VBA, ASP.NET Core, WPF, Xamarin, Power Platforms, XAML, MVC, LINQ, Entity Framework. Bazy danych SQL Server, Oracle, MySQL, Firebird
Wrocław i okolice …lub zdalnie. |
|
 | ID posta:
424446
|
|
|
 |
|
|
ple4
Stały bywalec Excelforum

Wersja: Win Office 2003
Pomógł: 68 razy Posty: 311
|
Wysłany: 23-01-2023, 12:29
|
|
|
Plik w zipie z wyposzczenia nr 424138 jest wg mnie uszkodzony - arkusze "REJESTR POSTĘPOWAŃ" i "REJESTR SYSTEMOWY" nie odpowiadają w ogóle na operacje "przycinania obszaru użytkowego" i nie przyjmują nowych "wymiarów zasięgu wierszy i kolumn". Każda próba usunięcia zakresu pustych wierszy/kolumn kończy się u mnie długotrwałą zwiechą i komunikatami o braku zasobów. Jak usunąć owe arkusze, to waga pliku z 4 mega spada do około 200 kilo - faktem jest, że nie mam dostępu do wersji wyższej jak E2k10, więc może tu leży przyczyna (?).
Ps: Jakby trochę uporządkować to "UserForm_Initialize", to wizualnie wychodzi mi coś takiego:
Kod: | Option Explicit
Private srs As Worksheet, sof As Worksheet
Private Sub UserForm_Initialize()
Dim a
Set sof = ThisWorkbook.Worksheets(ARKUSZ_OFERENCI)
Set srs = ThisWorkbook.Worksheets(REJESTR_SYSTEMOWY)
a = sof.Range("J1:" & sof.Range("J1").End(xlToRight).Address(0, 0)).Value
Me.ComboBox1.Column() = a
With Me.ListBox1
.ColumnCount = 6
.ColumnWidths = "25;120;220;200;200;90;100"
.RowSource = "'" & ARKUSZ_OFERENCI & "'!A2:G" & sof.Range("B1").End(xlDown).Row
End With
Me.ListBox2.Column() = a
Me.TextBox1.Value = srs.Cells(ActiveCell.Row, "AI").Value ' <=== Co z tym "Active" ?!
Me.Nazw_Lp.Left = 288
Me.Nazw_Lp.Width = 30
Me.Nazw_skroc.Width = 120
Me.Nazwa_kontrah.Width = 220
Me.Nazwa_Adres.Width = 200
Me.Nazwa_email.Width = 200
Me.Nazwa_NIP.Width = 90
Me.Nazw_skroc.Left = Me.Nazw_Lp.Left + Me.Nazw_Lp.Width
Me.Nazwa_kontrah.Left = Me.Nazw_skroc.Left + Me.Nazw_skroc.Width
Me.Nazwa_Adres.Left = Me.Nazwa_kontrah.Left + Me.Nazwa_kontrah.Width
Me.Nazwa_email.Left = Me.Nazwa_Adres.Left + Me.Nazwa_Adres.Width
Me.Nazwa_NIP.Left = Me.Nazwa_email.Left + Me.Nazwa_email.Width
End Sub
|
|
|
 | ID posta:
424452
|
|
|
 |
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum
|
Dodaj temat do Ulubionych Wersja do druku
|
|
Strona używa plików cookies.
Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe
|