napisał: vhlotor postów: 8
umieszczony: 27 lipca 2006 10:48
|
|
Problem dostępu do pliku rozwiązałem. Buszując po necie udało mi się wreszcie znaleźć odpowiedni kod. Natomiast cały czas pozostaje problem importu danych do comba (wszystko jedno czy z txt czy xls) i przypisania mu wartości z drugiej kolumny. Proszę, połamcie troszkę głowy nad moim problemem. Zlitujcie się ;) |
|
napisał: vhlotor postów: 8
umieszczony: 21 czerwca 2006 10:59
|
|
aktualnie testuję wasze propozycje. jeśli wpadniecie na jeszcze jakieś ciekawe rozwiązania to piszcie. im więcej tym lepiej :) Co do pytania Trebora o "sposób nie działania" kodu. Poprostu wyłącza makro. Zatrzymuje się i tyle. nawet nie wyświetla błędu w kodzie :/ Pozdro i naprawdę wielkie dzięki za zainteresowanie! |
|
napisał: Rycho postów: 291
umieszczony: 20 czerwca 2006 14:01
|
|
Errata.
W kodzie jest mała :( niedoróbka. Nie zamyka on excela.
Powinno być:
Sub Wczytaj_Dane_z_Excela()
'...
FlagaDaneAB = True
Set xlRg = Nothing
xlBook.Close SaveChanges:=False
Set xlBook = Nothing
xlApp.Application.Quit
Set xlApp = Nothing
End Sub
Rycho |
|
napisał: Rycho postów: 291
umieszczony: 20 czerwca 2006 02:43
|
|
Witam.
Założenia: w Arkuszu1 wybieranego pliku excela jest umieszczona baza kodow pocztowych (miejscowość, kod pocztowy).
Przykład zrobiłem w wordzie :) wywołując z niego excela.
Może się przyda?
'MODUŁ OGÓLNY
'Dane z excela będą pobierane tylko jeden raz
Public FlagaDaneAB As Boolean 'czy tablica została pobrana
Public daneAB() 'tablica danych z kolumn A:B z excela
Sub test()
UserForm1.Show
End Sub
Sub Wczytaj_Dane_z_Excela()
Dim xlApp As Object
Dim xlBook As Excel.Workbook
Dim xlRg As Excel.Range
Dim xlFileName As String
If FlagaDaneAB = True Then Exit Sub
Set xlApp = CreateObject("excel.application")
'wybór pliku do otwarcia
'ChDir "C:\dane"
'UWAGA: poniższa instrukcja rodzi problemy przy analizie kodu 'krok po kroku'
'neleży ją "przeskoczyć" umieszczając punkt zatrzymania za nią
xlFileName = Excel.Application.GetOpenFilename("Arkusze excela ,*.xls")
'otwarcie skoroszytu
Set xlBook = Excel.Workbooks.Open(xlFileName)
'przepisanie kolumn do tablicy
With xlBook.Worksheets("Arkusz1")
Set xlRg = .Range("A1:B" & .Range("A1").End(xlDown).Row)
daneAB = xlRg.Value
End With
FlagaDaneAB = True
Set xlBook = Nothing
Set xlApp = Nothing
End Sub
'MODUŁ USERFORM
'okno zawiera: pole kombi, pole tekstowe, przycisk
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub ComboBox1_Change()
TextBox1.Value = ComboBox1.Value
End Sub
Private Sub UserForm_Initialize()
Call Wczytaj_Dane_z_Excela
'daneAN jako lista pola kombi
ComboBox1.List = daneAB
ComboBox1.BoundColumn = 2
End Sub
Rycho |
|
napisał: Trebor postów: 1209
umieszczony: 19 czerwca 2006 21:02
|
|
Cytat:
Set xlapp = CreateObject("excel.application")
file_path = "c:\zam\"
file_path = file_path + "zam.xls"
Set xlapp = GetObject(file_path)
Co oznacza nie działa (zatrzymuje się, wyskakuje błąd itd)
W VBA ten fragment działa z tym, że obiekt Zam.xls jest ukryty.
Może pomoże to:
xlapp.Application.Visible = True
lub
Windows("zam.xls").Visible = True
a może jedno i drugie ?
Pozdrawiam |
|
napisał: vhlotor postów: 8
umieszczony: 19 czerwca 2006 09:15
|
|
To fragment kodu poprzez który ściągam dane z arkusza:
Dim CR As String ' Chr$(rcCR) = Chr$(13) = Control-M
Dim ESC As String ' Chr$(rcESC) = Chr$(27) = Control-[
Dim file_path
Dim Get_Art_From_Excel As String
Dim Get_Cnt_From_Excel As Integer
Dim Get_Price_From_Excel As Double
Dim Get_Cnuf_From_Excel As String
Dim Get_Dept_From_Excel As String
Dim str_Price_full As String
CR = Chr$(rcCR)
ESC = Chr$(rcESC)
Set xlapp = CreateObject("excel.application")
file_path = "c:\zam\"
file_path = file_path + "zam.xls"
Set xlapp = GetObject(file_path)
Session.Transmit CR
Get_Cnuf_From_Excel = xlapp.Sheets("Arkusz1").cells(1, 2).Value
Session.Transmit Get_Cnuf_From_Excel & CR
Get_Dept_From_Excel = xlapp.Sheets("Arkusz1").cells(2, 2).Value
Session.Transmit Get_Dept_From_Excel & CR
Nie jest to jakaś profesjonalka, zwłaszcza że nie moja, kolega mi podsunął, i ściągam przez linię: xlapp.Sheets("Arkusz1").cells(1, 2).Value . Jeśli jest jakiś lepszy sposób to, please!, podajcie. Co zrobić jeśli chce żeby ściągał mi dane z kolejnych komórek aż nie znajdzie pustej? Chodzi o to żeby uzupełniać listę, a nie zmieniać kodu.
Aby utrudnić problem :P dodam jeszcze coś. Jak poprawić wybór pliku *.xls, aby można było wybierać dowolny, poprzez przycisk i okienko dialogowe (jak w windowsie). Takie okno już umiem otwierać i wpisać nawet ścieżkę dostępu do textboxa, ale jak korzystam z deklaracji pilku jak w przedstawionym fragmencie to to nie chce działać :( Chodzi o poprawienie fragmentu:
Set xlapp = CreateObject("excel.application")
file_path = "c:\zam\"
file_path = file_path + "zam.xls"
Set xlapp = GetObject(file_path)
Pozdrawiam i dziękuję za odzew (i chęci :P) |
|
napisał: Trebor postów: 1209
umieszczony: 18 czerwca 2006 21:59
|
|
Coś wydaje się, że problem nie jest skomplikowany tylko mamy problem z komunikacją. Tablicę łatwo stworzyć i wypełnić danymi pod VBA np:
'deklaracja tablicy dwuwymiarowej o trzech wierszach i dwóch kolumnach
Dim tablica(2, 1) As String
'wypełnienie tablicy
For a = 0 To 2
'pierwszy wiersz tablicy i pierwsza kolumna równa się zawartości komórki
tablica(a, 0) = Cells(a + 1, 1)
'pierwszy wiersz tablicy i druga kolumna równa się zawartości komórki
tablica(a, 1) = Cells(a + 1, 2)
Next a
ComboBox1.List() = tablica
Czy potrafisz do zmiennej pobrać zawartość komórki?
Coś w rodzaju a = Range("A1") lub a = cells(1,1)
Pozdrawiam |
|
napisał: vhlotor postów: 8
umieszczony: 18 czerwca 2006 21:21
|
|
Jeśli chodzi o posta Admina to niestety nie chodzi mi o dwie kolumny w comboboxie. Pracuję w programi o nazwie GOLD co niewiele może wam mówić. Korzysta on z edytora VB jaki jest w aplikacji Office. Jest to dość ograniczony edytor w porównaniu z innymi, bardziej rozbudowanymi. Już choć po opcjach comba w Accesie i edytorze VBA można to zobaczyć.
Teraz do Trebora: działam trochę na czuja i jestem początkującym w VB więc jeżeli masz namiary na jakiś dobry kurs wyjaśniający podstawy prostym językiem to byłbym wdzięczny. Czy z danych w Excelu mogę zbudować tę tablicę.
nie wiem czy dobrze zrozumiałem: "Jeśli pytanie dotyczy jak pobrać dane z excela w VBE to nie potrafię pomóc", lecz jeśli tak to chyba właśnie o to mi chodzi aby za pomocą kodu VB pobrać dane z arkusza Excel tak aby pierwsza kolumna arkusza została wpisana do comba a odpowiadające jej wiersze z drugiej kolumny przypisane tym wartościom i wyświetlane w textboxie.
Tzn. jeśli pobrałem z komórki A1 wartość np. Białystok to kod pod case ma być: textbox.text = "10101", itd.
Mam nadzieję że da się to zrobić i ktoś mnie poratuje bo już bałej gorączki dostaję.
Pozdrawiam |
|
napisał: admin postów: 613
umieszczony: 18 czerwca 2006 17:42
|
|
Cytat: Mam spory problem a tłukę się już po necie ze 2 tygodnie i nic. Chcę ściągnąć dane z jednej kolumny w arkuszu excel do combobox'a i z tego samego arkusza tylko z innej kolumny przypisać wartości do odpowiednich wierszy comba.
Przykład:
Białystok | 10101
Katowice | 23212
Kraków | 22991
...
i z takie przykładowe dane odpowiadające sobie chce przypisać kolejno do comba i jego wierszy, czyli jeżeli mam wiersz "Białystok" to żeby pobierał mi dla case wartość "10101". A... i drugą wartość (z case) chcę później umieścić w textboxie. Mam nadzieję że rozumiecie o co mi chodzi i że pomożecie. Z góry dzięki!
Czy chodzi Ci o to, że masz w Comboboksie dwie kolumny?
W jednej chesz mieć:
Białystok
Katowice
Kraków
...
a w drugiej:
10101
23212
22991
...
Jeśli wybierzesz z Comboboxa "Białystok" to w Tektboxa ma się wpisać 10101?
Dobrze Cię zrozumiałem?
Czy umieszczasz kontrolki na formularzu w edytorze VBA?
Poza tym nie rozumiem co to znaczy "Czy da się to wogóle zrobić w ograniczonym edytorze?"? Edytor VBA nie jest w żadnym stopniu ograniczony!!!
Pod jaką aplikację macierzystą piszesz swój program VBA? |
|
napisał: Trebor postów: 1209
umieszczony: 18 czerwca 2006 16:29
|
|
Jeśli pytanie dotyczy jak przypisać do comba jakieś dane to najłatwiej to zrobić mając tablicę danych np:
ComboBox1.List() = tablica
Mam badzieję, że działa to również w VBE.
Jeśli pytanie dotyczy jak pobrać dane z excela w VBE to nie potrafię pomóc.
Pozdrawiam |
|
napisał: vhlotor postów: 8
umieszczony: 18 czerwca 2006 14:13
|
|
niestety chyba jednak nie o to chodziło :( Ale dzięki za chęci. Pracuję na aplikacji korzystającej z Microsoft Visual Basic Editor i ma do dyspozycji tylko to co jest w nim. a w opcjach comba nie było linii ListFillRange. Pozatym chyba zrozumiałeś o co chodzi :) Czy da się to wogóle zrobić w ograniczonym edytorze? Nadal proszę o pomoc. Jeśli będą potrzebne moje pliki (formy, makra, itp.) to proszę o kontakt e-mailowy pod adresem: vhlotor@o2.pl |
|
napisał: Trebor postów: 1209
umieszczony: 16 czerwca 2006 20:14
|
|
Hej
Mam nadzieję, że combo i textbox masz z przybornika formantów.
Wejdź we własciwości Comboboxa i dla ListFillRange wpisz adres np. w postaci Arkusz1!A1:B3 (dwie kolumny). W zdarzeniu
Private Sub ComboBox1_Click()
TextBox1.Text = ComboBox1.List(ComboBox1.ListIndex, 1)
End Sub
Czy o to chodziło?
Pozdrawiam |
|
napisał: vhlotor postów: 8
umieszczony: 16 czerwca 2006 10:39
|
|
Mam spory problem a tłukę się już po necie ze 2 tygodnie i nic. Chcę ściągnąć dane z jednej kolumny w arkuszu excel do combobox'a i z tego samego arkusza tylko z innej kolumny przypisać wartości do odpowiednich wierszy comba.
Przykład:
Białystok | 10101
Katowice | 23212
Kraków | 22991
...
i z takie przykładowe dane odpowiadające sobie chce przypisać kolejno do comba i jego wierszy, czyli jeżeli mam wiersz "Białystok" to żeby pobierał mi dla case wartość "10101". A... i drugą wartość (z case) chcę później umieścić w textboxie. Mam nadzieję że rozumiecie o co mi chodzi i że pomożecie. Z góry dzięki! |
|
 wstecz 1 dalej  wszystkich stron: 1
|