Date: prev next · Thread: first prev next last
2025 Archives by date, by thread · List index



First, let me tell you what your macro does.
 
You clicked in a specific cell, which made that cell the current cell. In this case you clicked in 
Cell E4, so these lines in your macro set the cell E4 to be current.
 
args1(0).Name = "ToPoint"
args1(0).Value = "$E$4"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
 
Next, you enter “Input Mode”
dispatcher.executeDispatch(document, ".uno:SetInputMode", "", 0, Array())
 
And finally, you enter the string 132, which is NOT simply removing the first character.
args3(0).Name = "StringName"
args3(0).Value = "132"
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args3())
 
What you want to do is to check to see where the cursor is located or to check what cells are 
selected rather than selecting a specific cell.
 
Sub Net_2
 rem Make sure that at least one cell is selected. 
 Dim oSelections
 Dim oCell
 Dim s As String
 
 oSelections = ThisComponent.getCurrentSelection()
 ' Could print an error, but just get out instead.
 If IsNull(oSelections) Then Exit Sub
 
 If oSelections.supportsService("com.sun.star.sheet.SheetCell") Then
   'Print "One Cell selected = " & oSelections.getImplementationName()
   'MsgBox "getString() = " & oSelections.getString()
 ElseIf oSelections.supportsService("com.sun.star.sheet.SheetCellRange") Then
   Rem So a single block of cells selected. I could process all of these, but 
   Rem I won't bother. I only want to work for a single cell.
   Print "One Cell Range selected = " & oSelections.getImplementationName()
   Exit Sub
 ElseIf oSelections.supportsService("com.sun.star.sheet.SheetCellRanges") Then
   Rem Multiple cell ranges selected, just ignore this.
   Print "Multiple Cell Ranges selected = " &_
          oSelections.getImplementationName()
   Print "Count = " & oSelections.getCount()
   Exit Sub
 Else
   Rem OK, I did not expect this!
   Print "Something else selected = " & oSelections.getImplementationName()
   Exit Sub
 End If
 Rem If we get here, then only one cell is selected.
 Rem Lets be really stupid here rather than smart!
 Rem No reason to do this, but makes it easier to read.
 oCell = oSelections
 
 Rem I am a bit concerned about what the cell contains. 
 Rem The cell may contain a formula, value, text, or be empty.
 If oCell.getType() = com.sun.star.table.CellContentType.EMPTY Then
   Rem Nothing to do, the cell is empty
 ElseIf oCell.getType() = com.sun.star.table.CellContentType.FORMULA Then
   Rem Don't think we should do anything if there is a formula in the cell
 ElseIf oCell.getType() = com.sun.star.table.CellContentType.TEXT Then
   s = oCell.getString()
   If Len(s) < 2 Then
     Rem Less than two charcters so just set the string to be empty
     oCell.setString("")
   Else
     Rem Remove the leading character.
     Rem To be really paranoid, I should get the text object 
     Rem and remove the first character so that I can 
     Rem retain any formating. This pretty much killls any formatting 
     Rem but you probably really do not want to see how to do that.
     oCell.setString(Right(s, Len(s) - 1))
   End If
 ElseIf oCell.getType() = com.sun.star.table.CellContentType.VALUE Then
   Rem Anything I do here is very dangerous, but I will do it anyway.
   Rem I can use Str() to convert without localization
   Rem I can use CStr() to convert using localization.  
   Rem An extra space is included in the string so remove it.
   Rem This feels dangerous, but it probably kind of works!
   Rem I am not checking for things such as dates. Everything about this
   Rem feels dangerous.
   s = Trim(Str(oCell.getValue()))
   s = Right(s, Len(s) - 1)
   Dim d As Double
   d = s
   oCell.setValue(d)
 End If
End Sub
 

On Monday, July 28, 2025 20:07 EDT, Dave Close <dave@compata.com> wrote:

 
Near as I can tell, the way to do this is with a macro. I've tried
following several guides but it isn't working. What I want is really
simple: Select a shortcut (say F3) and have my spreadsheet respond as
though I had pressed four keys, F2 to start editing a cell, HOME to
position my cursor at the start of the cell, DEL to delete the first
character in the cell, ENTER to finish editing. But when I tried to
record this macro, nothing happened until I selected a cell. Then when
I tried to run the macro, the current cell was changed to contain what
the cell contained where recording was performed. What am I doing wrong?

I've looked at the macro code generated and don't see anything related
to what I want. I'd try to fix it but have no clue what to change. Here's
the macro which was recorded.

sub Neg
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$E$4"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SetInputMode", "", 0, Array())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "StringName"
args3(0).Value = "132"
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args3())
end sub

Yeah, E4 was the cell where I tried recording and its value at that time
was 132. But I don't want to always do this only on that cell and I don't
want the result to always be 132.
-- 
Dave Close, Compata, Irvine CA +1 714 434 7359
dave@compata.com dhclose@alumni.caltech.edu
"Punctuality is the virtue of the bored." -- Evelyn Waugh



-- 
To unsubscribe e-mail to: users+unsubscribe@global.libreoffice.org
Problems? https://www.libreoffice.org/get-help/mailing-lists/how-to-unsubscribe/
Posting guidelines + more: https://wiki.documentfoundation.org/Netiquette
List archive: https://listarchives.libreoffice.org/global/users/
Privacy Policy: https://www.documentfoundation.org/privacy

 



 

-- 
To unsubscribe e-mail to: users+unsubscribe@global.libreoffice.org
Problems? https://www.libreoffice.org/get-help/mailing-lists/how-to-unsubscribe/
Posting guidelines + more: https://wiki.documentfoundation.org/Netiquette
List archive: https://listarchives.libreoffice.org/global/users/
Privacy Policy: https://www.documentfoundation.org/privacy

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.