This requires an installable onEdit() trigger. I provide an onOpen() function with a createMenu method to use to install the onEdit() trigger from a menu. I also provided the isTrigger function that checks to make sure that there isn't one already installed so that you don't end up with multiple triggers. So be sure to change the name of the function and remove the old onEdit() function. The old onEdit() function didn't have permission to get user information.
function onInstallableEdit(e) {
if(e.range.getSheet().getName()=='Sheet188') {
if(e.range.columnStart==3 && e.range.rowStart>1) {
if(e.range.offset(0,-2).isBlank()) {
e.range.offset(0,-2).setValue(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), " HH:mm:ss E MMM dd,yyyy"));
}
e.range.offset(0,-1).setValue(Session.getActiveUser().getEmail());
}
}else{
return;
}
}
function installonEdit() {
if(!isTrigger('onInstallableEdit')) {
ScriptApp.newTrigger('onInstallableEdit').forSpreadsheet(SpreadsheetApp.getActive()).onEdit().create();
}
}
function isTrigger(funcName){
var r=false;
if(funcName){
var allTriggers=ScriptApp.getProjectTriggers();
for(var i=0;i<allTriggers.length;i++){
if(funcName==allTriggers[i].getHandlerFunction()){
r=true;
break;
}
}
}
return r;
}
function onOpen() {
SpreadsheetApp.getUi().createMenu('My Menu')
.addItem('Install On Edit Trigger','installonEdit')
.addToUi();
}