< 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 
Milan-158(5.12.2024 12:22)#057085 
Děkuji oběma. 
Řešení od Moskyta (ano, mám Office 32 bit) se chová divně, text se tam sune hodně pomalu (asi minutu). A z původního textu 
Toto je testovací text do nového listu Notepadu. mi to do Notepadu zapsalo toto:
Toto stovací text do nového listu Notepadu.
ext do
Podruhé to zapsalo:
Toto estovac
Potřetí to zapsalo:
Toto je tes
Chvála bohu, řešení od Začátečníka funguje na první dobrou 

 takže ještě jednou děkan
citovat