Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno VBA Excel

Potřeboval bych vyřešit ukládání dat v Excelu.
Ze serveru se mi načítá do A1 aktuální čas a do A2 číselná hodnota.
Tyto data bych potřeboval uložit.
Ukládal bych asi data defacto jako ticková (tedy každou změnu číselné hodnoty), včetně času změny číselné hodnoty nebo v 1 minutovém intervalu.
VBA prakticky neumím, pomůžete mi prosím.
levap65 at seznam dot cz
Děkuji, Pavel

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Skús trochu viac opísať, čo presne potrebuješ. Dáta sa už nejakým spôsobom do A1 a A2 načítavajú? H…
los 28.07.2008 15:36
los
Přesně tak, data se načítají z DDE Serveru, tedy v A1 mám aktuální čas, a v A2 číselnou hodnotu. Ted…
levap 28.07.2008 17:48
levap
Ak to chceš robiť v Exceli, tak vo VBA pri otvorení zošita určíš pomocou metódy SetLinkOnData meno m… poslední
los 28.07.2008 19:19
los

Skús trochu viac opísať, čo presne potrebuješ.

Dáta sa už nejakým spôsobom do A1 a A2 načítavajú? Hodnoty to má získavať len vtedy, keď je otvorený excelovský súbor? Má sa ukladať len posledná hodnota alebo zoznam všetkých získaných hodnôt? Prečo to má byť vôbec spravené vo VBA?

Přesně tak, data se načítají z DDE Serveru, tedy v A1 mám aktuální čas, a v A2 číselnou hodnotu. Tedy čas se mění tak jak běží a hodnota v A2 se mění podle údajů ze serveru.
Vše běží jen při otevřeném excelu.
Tedy konkrétně:
v A1 mám čas např. 17:04 v A2 aktuální teplotu 30,2 (možná je už míň)

vše by se mělo ukládat asi takto (vždy při změně), počínaje časem spuštění

17:00 30,50
17:00 30,40
17:01 30,40
17:02 30,30
17:03 30,20
17:04 30,00 - aktuální stav, není nutný (je jinde, v A1 a A2)
Může to být provedeno i jinak než ve VBA, ale nic jiného mě nenapadlo.
Teď snad je to již jasné. Dík. Pavel

Ak to chceš robiť v Exceli, tak vo VBA pri otvorení zošita určíš pomocou metódy SetLinkOnData meno makra, ktoré sa má spúšťať pri každej aktualizácii dát z DDE servera. Malo by to ísť nejako takto:

Private Sub Workbook_Open()
    SetLinkOnData "WinWord|'C:\MSGFILE.DOC'!DDE_LINK1", "OnDataChanged"
End Sub

Private Sub OnDataChanged()
    Dim aCell As Range
    
    Set aCell = Sheet2.Range("A1")
    Set aCell = aCell.Offset(aCell.CurrentRegion.Rows.Count)
    
    aCell.Value = Sheet1.Range("A1").Value
    aCell.Offset(0, 1).Value = Sheet1.Range("A2").Value
End Sub

Tento kód treba vložiť ako makro zošita (Workbook), nie ako makro listu (Sheet).

Nijako som to netestoval, takže by som si v OnDataChanged pre istotu umiestnil bod prerušenia (napr. stlačením F9), že či sa to nespúšťa častejšie, než treba.

Keby som niečo také potreboval a nebol by som viazaný na Excel, napísal by som si na to samostatný program (napríklad v C/C++/C#). Ešte pred tým by som si zistil, či sa k tým dátam nedá dostať nejako inak, než cez DDE.

Zpět do poradny Odpovědět na původní otázku Nahoru