JimboBaggins Posted December 3, 2021 Report Share Posted December 3, 2021 Here is the scenario. I have a spreadsheet I need 4 different cells copied from. I need to paste them into another form. Instead of doing these 1 by 1, I am trying to make a series of macros that would let me save clipboard to a variable using ctrl1, then paste that variable using alt1. The idea is that I can get all 4 cells of data saved into variables to paste into the other form. like this: Click into cell b1, hit ctrl 1. Click into f1, hit ctrl 2. h1, ctrl3. l1, ctrl 4. Then I would go to my other form select filed, alt1. Next field, alt 2 and so on. When I try to do this, it will kind of work for the first one, but when I save the variable in the 2nd macro, it overwrites the data and I lose the data from variable %T[1]%. I need to be able to save 4 text variables for use in the text type macro to "paste" the info from each variable. Or some other way to accomplish this. Thanks in advance - I hope this made some sense. Quote Link to comment Share on other sites More sharing options...
rberq Posted December 3, 2021 Report Share Posted December 3, 2021 How about using a single macro to copy all four cells: Manually click into cell B1 Ctrl-1 to start macro Macro types Ctrl-c to copy the cell into clipboard Macro saves clipboard to T[1] variable Macro types ESC to exit from copy mode Macro types ArrowRight several times to get to cell F1 Macro types Ctrl-c to copy the cell into clipboard Macro saves clipboard to [T2] variable Macro types ESC to exit from copy mode Macro types ArrowRight several times to get to cell H1 Continue with similar coding until the four cells have been copied into T[1] through T[4] Likewise, your second macro can type T[1] into the cell you manually select, navigate by typing ArrowRight to the next cell, type T[2] into that cell, and so on. Let the two macros do the navigation from cell to cell, rather than you doing it manually. Quote Link to comment Share on other sites More sharing options...
JimboBaggins Posted December 3, 2021 Author Report Share Posted December 3, 2021 Thanks for replying! That's not a bad way of doing it for this one instance, but it prevents using it in other situations outside this particular scenario. Any ideas on how I could make it so I just had ctrl1-9 as clipboard that saves to variable T1-9, then alt1-9 as pasting those variables elsewhere? Quote Link to comment Share on other sites More sharing options...
acantor Posted December 4, 2021 Report Share Posted December 4, 2021 Ctrl + 1: Clipboard Empty Text Type (Simulate Keystrokes): <CONTROL>c Variable Set String %Clip1% from the clipboard contents Variable Save: Save Text Variables Beep <CLIPBOARD EMPTY/> <TEXT TYPE Action="0" Text="<CONTROL>c"/> <VARIABLE SET STRING Option="\x02" Destination="%Clip1%" NoEmbeddedVars="FALSE"/> <VARIABLE SAVE Option="\x01"/> <BEEP/> Alt + 1: Variable Restore: Restore Text Variables Text Type (Simulate Keystrokes): %Clip1% <VARIABLE RESTORE Option="\x01"/> <TEXT TYPE Action="0" Text="%Clip1%"/> Then clone the two macros for Ctrl + 2 and Alt + 2, and so on. You'll need to rename the variable in each macro to reflect which "clipboard" it uses, e.g., %Clip2%, %Clip3%, etc. Quote Link to comment Share on other sites More sharing options...
JimboBaggins Posted December 6, 2021 Author Report Share Posted December 6, 2021 This is who I set them up on my first attempt. If I use these right in a row, the variable save in the 2nd macro wipes out the saved from the first one. So, only the latest one used saves for use in the alt macro. Quote Link to comment Share on other sites More sharing options...
acantor Posted December 6, 2021 Report Share Posted December 6, 2021 The solution I posted reserves one variable per "clipboard": %Clip1%, %Clip2%, %Clip3%, etc. The macro that saves the variable %Clip2% doesn't do anything to %Clip1%, %Clip3%, etc. Each clipboard variable is independent of the other clipboards. The first time I tested my scripts, saving a "clipboard" did delete others. It was a bug. I inadvertently mixed up my variable names. How about sharing your code? Quote Link to comment Share on other sites More sharing options...
JimboBaggins Posted December 6, 2021 Author Report Share Posted December 6, 2021 ctrl-1 <CLIPBOARD EMPTY/> <TEXT TYPE Action="0" Text="<CONTROL>c"/> <VARIABLE SET STRING Option="\x02" Destination="%Clip1%" NoEmbeddedVars="TRUE"/> <VARIABLE SAVE Option="\x01"/> <BEEP/> alt-1 <VARIABLE RESTORE Option="\x01"/> <TEXT TYPE Action="0" Text="%Clip1%"/> ctrl-2 <CLIPBOARD EMPTY/> <TEXT TYPE Action="0" Text="<CONTROL>c"/> <VARIABLE SET STRING Option="\x02" Destination="%Clip2%" NoEmbeddedVars="TRUE"/> <VARIABLE SAVE Option="\x01"/> <BEEP/> alt-2 <VARIABLE RESTORE Option="\x01"/> <TEXT TYPE Action="0" Text="%Clip2%"/> Quote Link to comment Share on other sites More sharing options...
acantor Posted December 6, 2021 Report Share Posted December 6, 2021 Hmmm. You're right. The scripts are a bit flaky... They may need delays after clipboard operations. Quote Link to comment Share on other sites More sharing options...
JimboBaggins Posted December 6, 2021 Author Report Share Posted December 6, 2021 Dang - added 100ms between each step of all macros and same issue. Quote Link to comment Share on other sites More sharing options...
rberq Posted December 7, 2021 Report Share Posted December 7, 2021 If you wrote the ctrl-1 macro, then copied it to make the ctrl-2 macro, then ctrl-2 will still contain variable %Clip1% with a null value. So when ctrl-2 saves the variables, %Clip2% will be saved correctly, but %Clip1% will be saved as null, and subsequently restored as null. So ctrl-2 will in fact wipe out %Clip1%. Likewise, running macro ctrl-3 will wipe out %Clip1% and %Clip2%, ctrl-4 will wipe out %Clip1% and %Clip2% and %Clip3%, and so on. Click on the Variables tab in your ctrl-x macros and if there are "unauthorized" %Clip-x% variables, delete them. If you coded all the ctrl-x macros from scratch, then ignore everything I said. Quote Link to comment Share on other sites More sharing options...
acantor Posted December 7, 2021 Report Share Posted December 7, 2021 rberq is correct. Copying these macros can lead to variable-mush. Do what he says: go to the Variable tab in all of the Ctrl+ macros and make sure there is only one text variable for each. But the scripts were still failing occasionally for me. Adding longish delays in the Alt+ macros seemed to help. Ditto for using a clipboard copy command instead of simulating Ctrl + C. I added the right arrow key to the Ctrl+ macros to make it clearer that a copy operation had occurred. Ctrl + 1: Clipboard Empty Clipboard Copy Text Type (Simulate Keystrokes): <ARROW RIGHT> Variable Set String %Clip1% from the clipboard contents Variable Save: Save Text Variables Beep: Save Text Variables <CLIPBOARD EMPTY/> <CLIPBOARD COPY/> <TEXT TYPE Action="0" Text="<ARROW RIGHT>"/> <VARIABLE SET STRING Option="\x02" Destination="%Clip1%" NoEmbeddedVars="FALSE"/> <VARIABLE SAVE Option="\x01"/> <BEEP/> Alt + 1: Variable Restore: Restore Text Variables Delay: 300 milliseconds Text Type (Simulate Keystrokes): %Clip1% <VARIABLE RESTORE Option="\x01"/> <DELAY Flags="\x02" Time="300"/> <TEXT TYPE Action="0" Text="%Clip1%"/> Quote Link to comment Share on other sites More sharing options...
rberq Posted December 7, 2021 Report Share Posted December 7, 2021 9 hours ago, acantor said: Variable Restore: Restore Text Variables Delay: 300 milliseconds Text Type (Simulate Keystrokes): %Clip1% I like your idea of the right arrow key as a visual cue. Also putting a delay after the Clipboard Copy, lest the set-string-from-clipboard should happen before the clipboard has been populated. However, I would be shocked and dismayed if ME requires an explicit delay after a Restore Variables command. (Though I confess I haven't tested it.) If there is a timing problem, perhaps a longer Keystroke Speed command would make the typing more reliable. Quote Link to comment Share on other sites More sharing options...
JimboBaggins Posted December 7, 2021 Author Report Share Posted December 7, 2021 It was the variable mush - working as intended now. I didnt see it adding the the extra Clip2 instead of replacing Clip1. thank you all so much!!!!!!!! Quote Link to comment Share on other sites More sharing options...
acantor Posted December 7, 2021 Report Share Posted December 7, 2021 9 hours ago, rberq said: If there is a timing problem, perhaps a longer Keystroke Speed command would make the typing more reliable. I was able to prove (to myself, anyways) that the restore instruction needed time before the variable was available. I wish it wasn't so. Maybe a delay isn't necessary on a faster computer. The Windows 10 machine I bought 1.5 years ago is a bit pokey. Quote Link to comment Share on other sites More sharing options...
JimboBaggins Posted December 7, 2021 Author Report Share Posted December 7, 2021 Just now, acantor said: I was able to prove (to myself, anyways) that the restore instruction needed time before the variable was available. I wish it wasn't so. Maybe a delay isn't necessary on a faster computer. The Windows 10 machine I bought 1.5 years ago is a bit pokey. I removed all delays in mine and it's working great. I'm on a beefed up Gen 3 Thinkpad X1 though. Seriously folks - thanks for the input. Loving this! Quote Link to comment Share on other sites More sharing options...
rberq Posted December 8, 2021 Report Share Posted December 8, 2021 4 hours ago, acantor said: I was able to prove (to myself, anyways) that the restore instruction needed time before the variable was available. Maybe a difference in ME versions? I am running ME Pro 4.9.1.1. I can't make it fail, saving and restoring many million-byte variables and immediately checking the result of the restore, with no delay allowed. <COMMENT Value="Make lots of big variables to be saved and restored"/> <VARIABLE SET STRING Option="\x00" Destination="%many_bytes%" Value="a" NoEmbeddedVars="FALSE"/> <REPEAT START Start="1" Step="1" Count="20" Save="FALSE"/> <VARIABLE MODIFY STRING Option="\x07" Destination="%many_bytes%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <END REPEAT/> <TEXT BOX DISPLAY Title="Diagnostics" Content="{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Tahoma;}{\\f1\\fnil Tahoma;}}\r\n\\viewkind4\\uc1\\pard\\f0\\fs20 many_bytes = %many_bytes%\\f1 \r\n\\par }\r\n" Left="Center" Top="Center" Width="1195" Height="483" Monitor="0" OnTop="FALSE" Keep_Focus="TRUE" Mode="\x00" Delay="0" _ENABLED="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%a%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%b%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%c%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%d%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%e%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%f%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%g%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%h%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%i%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%j%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%k%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%l%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%m%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%n%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%o%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%p%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%q%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%r%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%s%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%t%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%u%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%v%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%w%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%x%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%y%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%z%" Variable="%many_bytes%" NoEmbeddedVars="FALSE"/> <COMMENT Value=" "/> <VARIABLE SET INTEGER Option="\x0D" Destination="%length%" Text_Variable="%z%"/> <TEXT BOX DISPLAY Title="Diagnostics" Content="{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Tahoma;}{\\f1\\fnil Tahoma;}}\r\n\\viewkind4\\uc1\\pard\\f0\\fs20 length of z = %length%\r\n\\par z = %many_bytes%\\f1 \r\n\\par }\r\n" Left="Center" Top="Center" Width="1195" Height="483" Monitor="0" OnTop="FALSE" Keep_Focus="TRUE" Mode="\x00" Delay="0" _ENABLED="FALSE"/> <COMMENT Value="Make two variables to be tested "/> <VARIABLE SET STRING Option="\x00" Destination="%clip1%" Value="clip1" NoEmbeddedVars="FALSE"/> <VARIABLE SET STRING Option="\x00" Destination="%clip2%" Value="clip2" NoEmbeddedVars="FALSE"/> <COMMENT Value=" "/> <VARIABLE SAVE Option="\x00"/> <COMMENT Value=" "/> <VARIABLE SET STRING Option="\x00" Destination="%clip1%" Value=" " NoEmbeddedVars="FALSE"/> <VARIABLE SET STRING Option="\x00" Destination="%clip2%" Value=" " NoEmbeddedVars="FALSE"/> <VARIABLE RESTORE Option="\x01"/> <VARIABLE MODIFY STRING Option="\x08" Destination="%clip2%" Variable="%clip1%" NoEmbeddedVars="FALSE"/> <COMMENT Value=" "/> <TEXT BOX DISPLAY Title="Diagnostics" Content="{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Tahoma;}{\\f1\\fnil Tahoma;}}\r\n\\viewkind4\\uc1\\pard\\f0\\fs20 clip1=%clip1%\r\n\\par clip2=%clip2%\\f1 \r\n\\par \r\n\\par }\r\n" Left="Center" Top="Center" Width="278" Height="200" Monitor="0" OnTop="FALSE" Keep_Focus="TRUE" Mode="\x00" Delay="0"/> <COMMENT Value=" "/> <MACRO RETURN/> Quote Link to comment Share on other sites More sharing options...
acantor Posted December 8, 2021 Report Share Posted December 8, 2021 I suppose this could be a Macro Express version issue. I'm using MEP 6.something. But I suspect my computer is to blame, which may be the slowest PC I've ever owned. Many window- and application-specific macros don't fire if I activate them immediately after opening a window or application. Heavens to Betsy, I've never seen such misbehaviour in a macro! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.