< návrat zpět
MS Excel
Téma: Text z Excelu do Notepad Windows 11
Zaslal/a Milan-158 29.11.2024 15:08
Ahoj, mám letitou proceduru, která vyzobe nějaké hodnoty z worksheetu, uloží je do textové proměnné (strX), pak otevře poznámkový blok a vloží to tam. Zde je příslušná část kódu
myApp = Shell("Notepad", vbNormalFocus) 'otevri Notepad
SendKeys strX, True 'vloz text
Poté, co jsme nuceně museli migrovat na Win11, tak se to chová nepředvidatelně: Notepad se otevře, ale ten text to namísto do něj vloží do excelu, tam kde zrovna stojí kurzor. Jindy to zase vloží do Notepadu...
Ten Notepad ve Windows11 je trošku jiný, umožňuje více oken, tak to bude možná jedna z možných příčin potíží.
Přes google jsem nenašel, že by někdo tento problém chtěl řešit.
Máte s tímto někdo zkušenosti - asi by to chtělo nějak zadefinovat na který list Notepadu to vložit, ale nevím jak
Začátečník(30.11.2024 12:31)#057060 Zkusil bych to přes soubor.
Nejprve data uložit do souboru a ten pak otevřít v NotePadu.
Např.:
Sub CopyToNotepad(strText as String)
Dim objFSO As Object
Dim objFile As Object
' Vytvoření objektu FileSystemObject
Set objFSO = CreateObject("Scripting.FileSystemObject")
' Vytvoření a otevření textového souboru
Set objFile = objFSO.CreateTextFile("C:\Temp\output.txt", True)
' Zapsání textu do souboru
objFile.WriteLine strText
' Zavření souboru
objFile.Close
' Otevření Notepadu s vytvořeným souborem
Shell "notepad.exe C:\Temp\output.txt", vbNormalFocus
End Subcitovat
€Ł мσşqμΐτσ(30.11.2024 20:18)#057064 Nebo tohle, předpokldádam že máš office 32bit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" _
(ByVal hwnd As Long) As Long
Sub OpenExistingNotepadAndSendText()
Dim strX As String
Dim hwndNotepad As Long
' Text k odeslání
strX = "Toto je testovací text do nového listu Notepadu."
' Najdi okno Notepadu
hwndNotepad = FindWindow("Notepad", vbNullString)
If hwndNotepad = 0 Then
' Notepad není spuštěn, otevři ho
Shell "Notepad", vbNormalFocus
' Chvilku počkej, než se Notepad otevře
Application.Wait Now + TimeValue("00:00:02")
' Najdi okno Notepadu znovu
hwndNotepad = FindWindow("Notepad", vbNullString)
End If
' Pokud bylo okno nalezeno
If hwndNotepad <> 0 Then
' Nastav fokus na okno Notepadu
SetForegroundWindow hwndNotepad
' Otevři nový list (Ctrl+N)
SendKeys "^(n)", True
' Počkej malou chvíli na vytvoření nového listu
Application.Wait Now + TimeValue("00:00:01")
' Odešli text do nového listu
SendKeys strX, True
Else
MsgBox "Nepodařilo se najít nebo otevřít okno Notepadu.", vbExclamation
End If
End Subcitovat