Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 73971 Skopiuj do schowka 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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 :mrgreen:
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
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

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.wip.pl

Archiwum

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